---
title: Build and Deliver Native Apps with EAS
---

[Expo Application Services (EAS)](https://expo.dev/eas) is a service that helps you build and deploy your React Native apps without the hassle of managing code signing, provisioning profiles, and other complexities of native development by yourself.

Native apps built with One can be deployed using EAS. If you created your One app using one of our templates, it would already work with EAS out of the box. If not, refer to the "Setup Your One App for EAS" section below.

After the initial EAS setup (`eas build:configure`), you will be able to run `eas build` to build your app, and `eas submit` to submit it to the App Store or Google Play directly in your One project.

For more instructions, see the ["Create your first build" guide in the EAS documentation](https://docs.expo.dev/build/setup/).

<Notice>
  It's possible that you'll need to configure your app for distribution, such as setting an unused bundle identifier in `app.json` for your app. Generally, following the instructions you saw in the terminal and the [EAS documentation](https://docs.expo.dev/build/setup/) should be sufficient to resolve most issues.
  <br /><br />
  A common type of error you'll probably see in an EAS build is:

  ```
  The engine "node" is incompatible with this module. Expected version "^20.15.0". Got "18.18.0"
  ```

  This is because EAS defaults to a relatively old version of Node.js. To fix this, you can modify your `eas.json` and [specify the version of Node.js](https://docs.expo.dev/build/eas-json/#selecting-build-tool-versions) like this:

  ```json
  {
    /* ... */
    "build": {
      "shared": {
        "node": "20.15.0"
      },
      "development": {
        "extends": "shared",
        /* ... */
      },
      "preview": {
        "extends": "shared",
        /* ... */
      },
      "production": {
        "extends": "shared",
        /* ... */
      }
    },
    /* ... */
  }
  ```
</Notice>

## Setup Your One App for EAS

While our templates are configured in a way that works with EAS, if you're starting from scratch or migrating an existing project, some setup will be required to make your One app deployable with EAS.

1. Ensure `expo` is installed in your project.

2. Add a `react-native.config.cjs` to your project root (next to your `package.json`) with the following content:

    ```js
    module.exports = {
      // Setting up and overriding some react-native CLI commands.
      // Necessary for building native iOS and Android apps,
      // where Vite shall be used instead of Metro for JS bundling during the build precess.
      commands: [...require('vxrn/react-native-commands')]
    }
    ```

3. Modify your `app.json` (or `app.config.js`) and add `vxrn/expo-plugin` to `expo.plugins`. This plugin will hook into the Expo build process running on EAS to ensure your One app is built correctly:

    ```json
    {
      "expo": {
        "plugins": ["vxrn/expo-plugin"]
      }
    }
    ```
